package com.itmuch.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;


/*
 * 	Hystrix Health Indicator及Metrics Stream：
 *  使用hystrix保护应用
 *  1.添加commandProperties=@HystrixProperty(name="execution.isolation.strategy",value="SEMAPHORE")，
 * 保证findById和findByIdFallback方法是同一个线程运行，不然的话findById是一个线程，findByIdFallback是一个隔离的线程
 * 
 * 2.http://localhost:8010/health  是显示状态的数据，当服务提供者关闭服务的时候，服务消费者会不断尝试连接，最后没法连接了，
 * 状态status会发生改变，去连接@HystrixCommand的方法，
 *    
 * 3.http://localhost:8010/hystrix.stream 数据一直不断变化，是监控线程，短路器是否打开的数据状态，太多没法查看，
 * 到时候使用Dashboard来查看
 *  
 * */

@EnableCircuitBreaker
@EnableEurekaClient
@SpringBootApplication
public class SimpleRibbonHystrixPropagationApplication {
	
	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}
	
	public static void main(String[] args) {
		SpringApplication.run(SimpleRibbonHystrixPropagationApplication.class, args);
	}
}
